It’s about getting things down to one number. Using stats the way we read them, we’ll find the value in players that nobody else can see. Peter Brand in Moneyball
O ano é 2001. Você foi contratado para ajudar a aproveitar ao máximo o orçamento cada vez menor de jogadores do time de beisebol Oakland Athletics. Todos os anos, times de elite contratam novos jogadores de beisebol. Infelizmente, você está com poucos jogadores famosos – e com poucos fundos. Porém, com um pouco de SQL e um pouco de sorte, quem disse que ainda não é possível criar uma equipe que desafie as expectativas?
Com um banco de dados chamado moneyball.db
– que contém
informações sobre jogadores, seu desempenho e seus salários – ajude o
Oakland Athletics a encontrar o valor em jogadores que outros
podem perder.
As informações estão contidas no banco de dados
moneyball.db
BAIXAR
moneyball.db
representa todos os jogadores, equipes,
salários e desempenhos da Liga Principal de Beisebol
até 2001. Em particular, moneyball.db
representa as
seguintes entidades:
Dentro de moneyball.db
, você encontrará diversas tabelas
que implementam os relacionamentos descritos no diagrama acima. Clique
nos menus suspensos abaixo para saber mais sobre o esquema de cada
tabela individual.
A tabela players contém as seguintes
colunas:
id
: identifica o id do djogadorfirst_name
: o primeiro nome do jogadorlast_name
: último nome do jogadorbats
: é o lado em que o jogador rebate (“L” para
left e “R” para right)throws
: é a mão que o jogador usa para lançar a bola
(“L” para left e “R” para right)weight
: o peso do jogador em librasheight
: a altura do jogador em polegadasdebut
: a data (expressa como YYYY-MM-DD
)
em que o jogador fez seu primeiro jogofinal_game
: a data (expressa como
YYYY-MM-DD
) em que o jogador fez seu último jogobirth_year
: ano em que o jogador nasceubirth_month
: mês em que o jogador nasceubirth_day
: dia em que o jogador nasceubirth_city
: cidade em que o jogador nasceubirth_state
: estado em que o jogador nasceubirth_country
: país em que o jogador nasceuA tabela teams contém as seguintes
colunas:
id
: identifica o id de cada timeyear
: ano em que o time foi formadoname
: o nome do timepark
: o nome do parque em que o time joga (ou
jogava)A tabela performances contém as
seguintes colunas:
id
: identifica o id da performanceplayer_id
: id do jogador que teve a performanceteam_id
: id do time para o qual o jogador teve a
performanceyear
: ano em que o jogador teve a performanceG
: número de jogos que o jogador fez, para aquela time,
naquele anoAB
: que é o número de “preparos de rebatidas” do
jogador (ou seja, vezes em que ele levantou o taco para rebater), para
um determinado time, em um determinado anoH
: que é o número de rebatidas do jogador, para um
determinado time, em um determinado ano2B
: que é o número de duplas (rebatidas de duas bases)
do jogador, para um determinado time, em um determinado ano3B
: que é o número de triplos (rebatidas de três bases)
do jogador, para um determinado time, em um determinado anoHR
: que é o número de home runs do jogador,
para um determinado time, em um determinado anoRBI
: que é o número de “corridas impulsionadas” do
jogador (ou seja, corridas marcadas), para uma determinada equipe, em um
determinado anoSB
: que é o número de bases roubadas do jogador, para
um determinado time, em um determinado anoA tabela salaries contém as
seguintes colunas:
id
: identifica o id do salárioplayer_id
: id do jogador que recebe o salárioteam_id
: id do time que está pagando o salárioyear
: o ano em que o salário foi pagoPara cada uma das perguntas a seguir, você deve escrever uma única query SQL que produza os resultados especificados por cada problema. Sua resposta deve assumir a forma de uma única consulta SQL.
Seu gerente geral (ou seja, a pessoa que toma decisões sobre os contratos dos jogadores) pergunta se o time deveria trocar um jogador atual por Cal Ripken Jr., um craque que provavelmente está se aposentando. Escreva uma consulta SQL para encontrar o histórico salarial de Cal Ripken Jr (ordene por ano de forma decrescente).
Seu time vai precisar de um grande rebatedor de home runs. Ken Griffey Jr., vencedor de longa data dos prêmios Silver Slugger e Gold Glove, pode ser uma boa opção. Escreva uma consulta SQL para encontrar o histórico de home runs de Ken Griffey Jr.
Escreva uma consulta SQL para encontrar todos os times pelos quais Satchel Paige jogou.
Escreva uma consulta SQL para retornar os 5 melhores times, classificados pelo número total de acertos dos jogadores em 2001.
Você precisa fazer uma recomendação sobre qual jogador (ou jogadores) evitar o recrutamento. Escreva uma consulta SQL para encontrar o nome do jogador que recebeu o salário mais alto de todos os tempos.
Quanto precisariam pagar para conseguir o melhor rebatedor de home run da temporada passada? Escreva uma consulta SQL para encontrar o salário (DE 2001) do jogador que acertou mais home runs em 2001.
Quais salários as outras equipes estão pagando? Escreva uma consulta SQL para encontrar as 5 equipes com salários mais baixos (por salário médio) em 2001.
O primeiro nome dos jogadores.
O último nome dos jogadores.
O salário dos jogadores.
Os home runs dos jogadores.
O ano em que o jogador recebeu aquele salário E acertou os home runs.
(Considere um caso secundário: suponha que um jogador tenha vários
salários ou desempenhos em um determinado ano. Ordene-os primeiro pelo
número de home runs, em ordem decrescente, seguido pelo salário, em
ordem decrescente.) Tenha o cuidado de garantir que, para uma única
linha, o ano do salário e o ano do desempenho correspondam.
Para ajudá-lo a visualizar o que o gerente geral gostaria, eles lhe deram uma tabela de exemplo:
first_name | last_name | salary | year | HR |
---|---|---|---|---|
Don | Aase | 400000 | 1989 | 0 |
Don | Aase | 675000 | 1988 | 0 |
Don | Aase | 625000 | 1987 | 0 |
Don | Aase | 600000 | 1986 | 0 |
Jeff | Abbott | 300000 | 2001 | 0 |
Jeff | Abbott | 255000 | 2000 | 3 |
Jeff | Abbott | 255000 | 1999 | 2 |
Se tudo correr bem, você também poderá ver duas linhas como esta em sua tabela final:
first_name | last_name | salary | year | HR |
---|---|---|---|---|
Todd | Zeile | 3700000 | 1995 | 9 |
Todd | Zeile | 3700000 | 1995 | 5 |
Sua consulta deve retornar uma tabela com três colunas, uma para os nomes dos jogadores, uma para os sobrenomes e outra chamada “dólares por acerto”.
Você pode calcular a coluna “dólares por acerto” dividindo o salário de um jogador em 2001 pelo número de acertos que ele fez em 2001. Lembre-se de que você pode usar AS para renomear uma coluna.
Dividir um salário por 0 acertos resultará em um valor NULO. Evite o problema filtrando jogadores com 0 acertos.
Classifique a tabela pela coluna “dólares por acerto”, do menos para o mais caro. Se dois jogadores tiverem os mesmos “dólares por acerto”, ordene pelo nome, seguido do sobrenome, em ordem alfabética.
Assim como na questão 10, certifique-se de que o ano do salário e o ano do desempenho correspondam.
Você pode assumir, para simplificar, que um jogador terá apenas um salário e um desempenho em 2001.
Sua consulta deve retornar uma tabela com duas colunas, uma para os nomes dos jogadores e outra para os sobrenomes.
Você pode calcular o salário de um jogador por RBI dividindo o salário de 2001 pelo número de RBIs em 2001.
Você pode assumir, para simplificar, que um jogador terá apenas um salário e um desempenho em 2001.
Ordene seus resultados por ID de jogador, do menor para o maior (ou em ordem alfabética pelo sobrenome, já que ambos são iguais neste caso!).
Use o que aprendeu nas consultas 10 e 11.